It is the function of a computer's operating system to provide services to users, that is, to application-level programs. Often, however, the operating system of a computer is limited in the type of services it can provide. For example, many small, "personal" computer (PC) operating systems are unable to provide users with services that are not available directly on the PC itself. An example of such services are networking services such as resource sharing.
Conventionally, it has sometimes been possible to make such locally-unavailable services available to PC users, by means of one of two approaches.
One approach requires the user to dictate to the operating system particular step that it must undertake to obtain those services. This approach requires that the user program be aware of the environment of the PC, and the interfaces to that environment, so that is may provide the necessary dictates to the operating system. A significant disadvantage thereof is that the user program ceases to be portable, but must be changed each time the environment and interfaces change, to account for those changes. Another significant disadvantage is that the user is now effectively responsible for providing its own services--yet relieving the user of this responsibility is the purpose of having an operating system in the first place!
The second approach involves connecting to the operating system an "adjunct" that is capable of providing some of these locally-unavailable services, and which receives user request for locally-unavailable services and satisfies them instead of the operating system. That is, with respect to the unavailable services, the adjunct acts as a separate operating system from the user's viewpoint. However, it is a disadvantage of this approach that known adjuncts have typically required that users be aware of their existence and interact with them separately, and perhaps differently, from the operating system, thus placing at least some of the same burdens on users as does the first-described approach. Another disadvantage is that the adjunct replaces the operating system for purpose of providing the locally-unavailable services, and hence must duplicate significant portions of the functionality of the operating system--a condition that is wasteful of generally-scarce PC memory space. A further disadvantage of this approach is that known adjuncts are limited in the types of services they can provide: for example, one known adjunct is capable of providing only printer services that are available locally on a single computer that is directly connected to the PC.
The last-mentioned disadvantage is serious because it does not allow the PCs to take advantage of networking. Interconnection of computers into networks has many advantages. It allows users of individual computers to communicate with each other, and also allows individual computers to provide specialized resources and capabilities that can be shared in use by other computers.
The providing of networking capabilities in just any manner would not be a panacea, however! Particularly, interfacing of PCs with large, "mainframe", computers is typically detrimental to the performance of both. PCs are typically dedicated to a single user, and hence tend to have a fast user response, while mainframes tends to have high processing power and speed. But interfacing of numerous PCs to a mainframe computer generally slows down the PCs' response time due to the conflicts, and consequent waiting periods, experienced by PCs in contending for input and output (I/O) access to a limited number of mainframe I/O ports. Likewise, interfacing of numerous PCs to a mainframe computer generally slows down the mainframe's processing power, because of the processing power and time consumed by I/O transfers demanded by the PCs.
This problem is typically not solved by merely providing a windowing environment to users, because a human user must still interact with both the mainframe and a PC in order to decide which of the two machines he or she must interact with in order to obtain needed resources. A further disadvantage of requiring a user--human or program--to interact with both a PC and a mainframe computer is that the user must know not only how to interact with the mainframe, but also how to do so indirectly through the PC.